package com.boarsoft.boar.service;

import com.boarsoft.boar.file.FileExtService;
import com.boarsoft.common.util.FileUtil;
import org.codehaus.plexus.util.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

/********************************************
 * @系统名称： 四川农信分布式核心
 * @版本号： V1.0
 * @开发人员： 刘超
 * @创建日期： 2023/3/29 9:09
 * ------------------------------------------
 * @程序名称： NormalFileService
 * @业务模块： SC6000D 分布式核心-技术组
 * @程序类型： 组件
 * @程序功能： 本地文件操作服务
 * ------------------------------------------
 * @修改说明： 修改人：   修改日期：   修改原因：
 ********************************************/
public class NormalFileService implements FileExtService {
    private static Logger log = LoggerFactory.getLogger(NormalFileService.class);

    /**
     * 保存文件
     *
     * @param filename
     * @param content
     * @return
     */
    @Override
    public boolean saveFile(String filename, String content) {
        File file = new File(filename);
        if (!file.exists()) {
            FileUtils.mkdir(file.getParent());
        }
        try {
            FileUtil.write(file, content);
            return true;
        } catch (FileNotFoundException e) {
            log.error("Error on saving file to {}", filename, e);
        }
        return false;
    }

    /**
     * 保存文件
     *
     * @param filename
     * @param content
     * @return
     */
    @Override
    public boolean saveFile(String filename, byte[] content) {
        File file = new File(filename);
        if (!file.exists()) {
            FileUtils.mkdir(file.getParent());
        }
        try {
            FileUtil.writeBytes(file, content);
            return true;
        } catch (IOException e) {
            log.error("Error on saving file to {}", filename, e);
        }
        return false;
    }

    /**
     * 删除文件
     *
     * @param filename
     * @return
     */
    @Override
    public boolean deleteFile(String filename) {
        return FileUtil.deleteFile(filename);
    }

    /**
     * 拷贝文件
     *
     * @param sourceFileName
     * @param targetFileName
     * @return
     */
    @Override
    public boolean copyFile(String sourceFileName, String targetFileName) {
        File file = new File(sourceFileName);
        if (file==null||!file.exists()) {
            return false;
        }
        try {
            FileUtils.copyFile(file, new File(targetFileName));
        } catch (IOException e) {
            log.error("Error on copy file from {} to {}",sourceFileName,targetFileName,e);
            return false;
        }
        return true;
    }

    /**
     * 剪切文件
     *
     * @param sourceFileName
     * @param targetFileName
     * @return
     */
    @Override
    public boolean cutFile(String sourceFileName, String targetFileName) {
        boolean b = this.copyFile(sourceFileName, targetFileName);
        this.deleteFile(sourceFileName);
        return b;
    }

    /**
     * 重命名文件
     *
     * @param oldFileName
     * @param newFileName
     * @return
     */
    @Override
    public boolean renameFile(String oldFileName, String newFileName) {
        File f = new File(oldFileName);
        File newFile = new File(newFileName);
        if (f.exists()) {
            return f.renameTo(newFile);
        } else {
            return false;
        }

    }

    /**
     * 获取文件内容
     *
     * @param fileName
     * @return
     */
    @Override
    public byte[] getContent(String fileName) {
        File f = new File(fileName);
        if (!f.exists()) {
            log.error("Can not find file {}", fileName);
        }
        log.info("Read bytes from file {}", fileName);
        byte[] bytes;
        try {
            bytes = FileUtil.readBytes(f);
        } catch (IOException e) {
            bytes = new byte[0];
        }
        return bytes;
    }
}
